.PHONY: install uninstall clean

SOURCE_DIR := source
BUILD_DIR := build

SPHINXOPTS := -q

# compatibility version-related files
COMPAT_MAN_DIR := ../compat/doc

# source definitions shared across the Makefiles of this project
ifneq ($(wildcard ../Makefile.inc),../Makefile.inc)
  $(error ../Makefile.inc is missing, please run '../configure')
endif
include ../Makefile.inc

# source version definitions shared across the Makefiles of this project
include ../version.inc

# quit if no sphinx-build found at configure time
ifeq ($(builddoc),n)
  $(error No 'sphinx-build' command defined, cannot build documentation)
endif

man: $(BUILD_DIR)/module.1 $(BUILD_DIR)/ml.1 $(BUILD_DIR)/modulefile.4
ifeq ($(compatversion),y)
man: $(COMPAT_MAN_DIR)/module.1 $(COMPAT_MAN_DIR)/modulefile.4
endif

txt: $(BUILD_DIR)/diff_v3_v4.txt $(BUILD_DIR)/MIGRATING.txt \
	$(BUILD_DIR)/INSTALL.txt $(BUILD_DIR)/INSTALL-win.txt \
	$(BUILD_DIR)/NEWS.txt $(BUILD_DIR)/CONTRIBUTING.txt

html: $(BUILD_DIR)/module.html $(BUILD_DIR)/ml.html \
	$(BUILD_DIR)/modulefile.html $(BUILD_DIR)/diff_v3_v4.html \
	$(BUILD_DIR)/MIGRATING.html $(BUILD_DIR)/INSTALL.html \
	$(BUILD_DIR)/INSTALL-win.html $(BUILD_DIR)/NEWS.html \
	$(BUILD_DIR)/CONTRIBUTING.html

all: man txt

# enable HTML pages build only from git repository
ifeq ($(wildcard ../.git),../.git)
all: html
endif

define translate-in-script
sed -e 's|@prefix@|$(prefix)|g' \
	-e 's|@libexecdir@|$(libexecdir)|g' \
	-e 's|@etcdir@|$(etcdir)|g' \
	-e 's|@initdir@|$(initdir)|g' \
	-e 's|@modulefilesdir@|$(modulefilesdir)|g' \
	-e 's|@MODULES_RELEASE@|$(MODULES_RELEASE)|g' \
	-e 's|@MODULES_BUILD@|$(MODULES_BUILD)|g' \
	-e 's|@MODULES_BUILD_DATE@|$(MODULES_BUILD_DATE)|g' $< > $@
endef

# avoid shared definitions to be rebuilt by make
../Makefile.inc ../version.inc: ;

# rules to build docs from source are defined if docs are not found pre-built
# which happens when working from git repository or from a `git archive` dist
ifneq ($(builddoc),p)
$(SOURCE_DIR)/version.py: $(SOURCE_DIR)/version.py.in ../version.inc
	$(translate-in-script)

$(BUILD_DIR)/%.html: $(SOURCE_DIR)/%.rst $(SOURCE_DIR)/version.py
	$(SPHINXBUILD) $(SPHINXOPTS) -b html "$(SOURCE_DIR)" "$(BUILD_DIR)"

$(BUILD_DIR)/%.txt: $(SOURCE_DIR)/%.rst $(SOURCE_DIR)/version.py
	$(SPHINXBUILD) $(SPHINXOPTS) -b text "$(SOURCE_DIR)" "$(BUILD_DIR)"

$(BUILD_DIR)/%.4 $(BUILD_DIR)/%.1: $(SOURCE_DIR)/%.rst $(SOURCE_DIR)/version.py
	$(SPHINXBUILD) $(SPHINXOPTS) -t pathsubs -b man "$(SOURCE_DIR)" "$(BUILD_DIR)"

$(BUILD_DIR)/module.1.in: $(SOURCE_DIR)/module.rst $(SOURCE_DIR)/version.py
	$(SPHINXBUILD) $(SPHINXOPTS) -t pathsubs -b man "$(SOURCE_DIR)" "$(BUILD_DIR)"
	mv $(BUILD_DIR)/module.1 $@
endif

$(BUILD_DIR)/module.1: $(BUILD_DIR)/module.1.in
	$(translate-in-script)

# compatibility version-related rules
$(COMPAT_MAN_DIR)/module.1 $(COMPAT_MAN_DIR)/modulefile.4:
	$(MAKE) -C $(COMPAT_MAN_DIR) $(@F)

install: man txt
	mkdir -p $(DESTDIR)$(mandir)/man1 $(DESTDIR)$(mandir)/man4
ifeq ($(docinstall),y)
	mkdir -p $(DESTDIR)$(docdir)
	cp $(BUILD_DIR)/diff_v3_v4.txt $(DESTDIR)$(docdir)/
	cp $(BUILD_DIR)/MIGRATING.txt $(DESTDIR)$(docdir)/
	cp $(BUILD_DIR)/INSTALL.txt $(DESTDIR)$(docdir)/
	cp $(BUILD_DIR)/INSTALL-win.txt $(DESTDIR)$(docdir)/
	cp $(BUILD_DIR)/NEWS.txt $(DESTDIR)$(docdir)/
	cp $(BUILD_DIR)/CONTRIBUTING.txt $(DESTDIR)$(docdir)/
	cp example.txt $(DESTDIR)$(docdir)/
endif
	cp $(BUILD_DIR)/module.1 $(DESTDIR)$(mandir)/man1/
	cp $(BUILD_DIR)/ml.1 $(DESTDIR)$(mandir)/man1/
	cp $(BUILD_DIR)/modulefile.4 $(DESTDIR)$(mandir)/man4/
ifeq ($(compatversion),y)
	cp $(COMPAT_MAN_DIR)/module.1 $(DESTDIR)$(mandir)/man1/module-compat.1
	cp $(COMPAT_MAN_DIR)/modulefile.4 $(DESTDIR)$(mandir)/man4/modulefile-compat.4
endif

uninstall:
ifeq ($(docinstall),y)
	rm -f $(DESTDIR)$(docdir)/diff_v3_v4.txt
	rm -f $(DESTDIR)$(docdir)/MIGRATING.txt
	rm -f $(DESTDIR)$(docdir)/INSTALL.txt
	rm -f $(DESTDIR)$(docdir)/INSTALL-win.txt
	rm -f $(DESTDIR)$(docdir)/NEWS.txt
	rm -f $(DESTDIR)$(docdir)/CONTRIBUTING.txt
	rm -f $(DESTDIR)$(docdir)/example.txt
	rmdir $(DESTDIR)$(docdir)
endif
	rm -f $(DESTDIR)$(mandir)/man1/module.1
	rm -f $(DESTDIR)$(mandir)/man1/ml.1
	rm -f $(DESTDIR)$(mandir)/man4/modulefile.4
ifeq ($(compatversion),y)
	rm -f $(DESTDIR)$(mandir)/man1/module-compat.1
	rm -f $(DESTDIR)$(mandir)/man4/modulefile-compat.4
endif
	rmdir $(DESTDIR)$(mandir)/man1 $(DESTDIR)$(mandir)/man4
	rmdir $(DESTDIR)$(mandir)

clean:
# do not clean generated docs if not in git repository
ifeq ($(wildcard ../.git),../.git)
ifeq ($(wildcard $(BUILD_DIR)),$(BUILD_DIR))
	rm -rf $(BUILD_DIR)
endif
	rm -f $(SOURCE_DIR)/version.py
endif
	rm -f $(BUILD_DIR)/module.1
